//定义变量 常量 
let a = 123;
a = "123";
console.log(a);

const b = 123;
//报错
//b = "123"; 
console.log(b); //输出
console.log();//换行

//数据类型
//基本数据类型 : number string boolean null undefined 
//对象 : ref  -> object (栈, 堆)
console.log("数据类型")
console.log(typeof a);
console.log(typeof b);
console.log(typeof true);
console.log(typeof null);
console.log(typeof undefined);
console.log(typeof {});
console.log(typeof Math);
console.log();
console.log(1/0);
console.log(1 - "45px");

//数据转换   ---number/string/boolean
//包装器类: Boolean  -> java.lang.Boolean    Number
console.log("显示转换");
console.log((10.02).toString);
console.log(String(null));
console.log(Number("    12.388"));
console.log(Number("12px"));//NaN
console.log(Number(true));//1
console.log(Number(null));//0
console.log(Number(undefined));//Nan
console.log(parseInt("12.34px").toFixed(1)); //保留一位小数  
console.log(Boolean(""))//false
console.log(Boolean(" "))//true


//算数运算符: + - * % /
//比较: < > <= >= != == ===
//逻辑运算符: && || !
console.log();
console.log("隐式转换");
console.log("px" + 5 + 4); //将4 5 转成字符串
console.log(5 + 4 + "px");  //做加法 4 + 5 = 9 再拼接
//除了加号 其他运算符之间运算 转化为number
console.log("4" - 2);  // 4 - 2 = 2 
console.log("4px" - 2); //任何数字和nan 做运算 都等于 nan

console.log("" == false); //0 == 0
console.log("" === false);//(严格等)  首先要类型是一样的,不然就是false

console.log(0 || null || "abc"); //寻找第一个真值 "abc"
console.log(1 || null || "abc"); //寻找第一个真值   1
console.log(123 && null && "abc"); //寻找第一个假值 null 

console.log(null ?? "123"); //"123"






